var gulp = require('gulp');
// 引入组件
var jshint = require('gulp-jshint');
var sass = require('gulp-sass');
var less = require('gulp-less');
var concat = require('gulp-concat');
var uglify = require('gulp-uglify');
var rename = require('gulp-rename');
var browserSync = require('browser-sync');
var sourcemaps = require('gulp-sourcemaps');

var browserify = require("browserify");
var babelify = require("babelify");
var source = require("vinyl-source-stream");
var shim = require('browserify-shim');
var envify = require('gulp-envify');

var reply = function(someone, content) {
	console.log('\n' + someone + '\n\t' + content + '\n');
}
var e_reply = reply.bind(this, '小e：');



gulp.task('browser', ['browserify'], function() {
	e_reply('看看有什么动静-。-');

	var files = [
		'./index.html',
		'./src/**/*.html',
		'./src/**/*.css',
		'./src/**/*.png',
		'./src/**/*.js',
		'./src/**/*.scss',
		'./dis/css/*.css'
	];

	browserSync.init(files, {
		server: {
			baseDir: ['./'], //根目录与项目目录
			directory: false,
			index: 'index.html'
		},
		port: 80
	});
	gulp.watch(['./src/**/*.js'], function() {
		gulp.run('browserify');
	});
	// gulp.watch("app/*.html").on('change', reload);
});

gulp.task('browserify', function() {
	e_reply('编译react，喝口水，放松放松。。。');
	return browserify('./src/index.js')
		.transform(babelify, {
			presets: ['es2015', 'react']
		})
		// .transform(shim)
		.bundle()
		.pipe(source('bundle.js'))
		.pipe(gulp.dest('./dis/react'));
});


// 检查脚本
gulp.task('lint', function() {
	e_reply('正在检查js，喝口水，放松放松。。。');

	gulp.src('./app/js/*.js')
		.pipe(jshint())
		.pipe(jshint.reporter('default'));
});

// 编译Sass
gulp.task('sass', function() {
	// src 可传入数组对象，各个匹配字符串
	e_reply('正在编译sass');

	gulp.src('./app/sass/*.scss')
		.pipe(sass({
			// outputStyle: 'compressed',
			loadPath: './app/sass/**'
		}))
		.on('error', sass.logError)
		// .pipe(sourcemaps.write())
		.pipe(gulp.dest('./app/css'));
});

gulp.task('less', function() {
	gulp.src('./app/less/*.less')
		// .pipe(sourcemaps.init())
		.pipe(less())
		// .on('error', less.logError)
		// .pipe(sourcemaps.write())
		.pipe(gulp.dest('./app/css'));
});

// 合并并压缩文件
gulp.task('scripts', function() {
	e_reply('正在努力合并压缩中');

	gulp.src('./dis/react/bundle.js')
		// .pipe(concat('all.js'))
		// .pipe(gulp.dest('./dis/react'))
		.pipe(rename('bundle.min.js'))
		.pipe(uglify())
		.pipe(gulp.dest('./dis/react'));
});

gulp.task('compress', function() {
	e_reply('正在努力合并压缩中');
	gulp.src('./dis/react/bundle.js')
		.pipe(rename('bundle.min.js'))
		.pipe(envify({
			_: 'purge',
			NODE_ENV: 'production'
		}))
		.pipe(gulp.dest('./dis/react'));
});

var _DIR_ = './app/weChat/js';

gulp.task('doc', function(cb) {
	e_reply('正在努力生成中');
	var config = require('./jsdoc.json');
	gulp.src(['README.md', _DIR_ + '/all/all.js'], {
			read: false
		})
		.pipe(jsdoc(config, cb));
});

//合并
gulp.task('jsconcat', function() {
	e_reply('正在努力合并中');

	gulp.src(_DIR_ + '/*.js')
		.pipe(concat('all.js'))
		.pipe(gulp.dest(_DIR_ + '/all'));
});

// gulp.task('mkdocing', function() {
//     e_reply('让我看看哪里改变了，喝口茶，放松放松。。。');
//     // 监听文件变化
//     gulp.watch([_DIR_ + '/*.js'], function() {
//         gulp.run('jsconcat', 'doc');
//     });
// });


// 默认任务
// gulp.task('default', function() {
//     e_reply('让我看看哪里改变了，喝口茶，放松放松。。。');
//     // gulp.run('lint', 'sass', 'scripts');
//     // 监听文件变化
//     gulp.watch(['./app/js/*.js', './app/sass/*.scss'], function() {
//         gulp.run('lint', 'sass', 'scripts');
//     });
// });